package com.wing.productionPlan.model.response;

import com.wing.productionPlan.model.entity.ProductionPlan;
import com.wing.productionPlan.model.request.DeviceTypeForm;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDateTime;

import com.fasterxml.jackson.annotation.JsonFormat;

import java.time.LocalDateTime;
import java.util.List;

import com.baomidou.mybatisplus.annotation.TableField;
import com.wing.productionPlan.model.entity.ProductionWorkOrder;

/**
 * 生产开工单VO
 *
 * @author
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class ProductionWorkOrderVO {

    /**
     * ID
     */
    private Long id;

    /**
     * 创建时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 创建者
     */
    private Long creator;

    /**
     * 修改者
     */
    private Long modifier;

    /**
     * 创建人
     */
    private String creatorName;

    /**
     * 修改人
     */
    private String modifierName;

    /**
     * 开工单备注
     */
    private String remark;

    /**
     * day
     */
    private Integer day;

    /**
     * no
     */
    private Integer no;

    /**
     * 企业编号
     */
    private String enterpriseCode;

    /**
     * 工单编码
     */
    private String code;

    /**
     * 工序id
     */
    private Long processId;

    /**
     * 工序编码
     */
    private String processCode;

    /**
     * 制造令编号
     */
    private String productionProcessDeviceCode;
    private String productionPlanRecordCode;

    /**
     * 工序名称
     */
    private String processName;

    private String processType;
    private String processTypeName;

    /**
     * 生产计划id
     */
    private Long productionPlanId;

    private Long productionPlanRecordId;


    /**
     * 设备型号
     */
    private String deviceModel;

    /**
     * 产品编号
     */
    private String skuCode;

    /**
     * 排产数量
     */
    private Integer outputQuantity;

    /**
     * 计划生产数量
     */
    private Integer productionQuantity;
    /**
     * 已完工数量
     */
    private Integer finishQuantity;

    /**
     * 前置工单结束时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime prepositionTime;


    /**
     * 预计开始时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime predictStartTime;

    /**
     * 预计完成时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime predictFinishTime;

    /**
     * 前置工单数
     */
    private Integer workOrderQuantity;

    /**
     * 状态
     */
    private ProductionWorkOrder.Status status;

    /**
     * 状态描述
     */
    @TableField(exist = false)
    private String statusDesc;

    public String getStatusDesc() {
        return status == null ? null : status.getDesc();
    }

    /**
     * 计划订单类型
     */
    private ProductionPlan.OrderType orderType;

    /**
     * 计划订单类型描述
     */
    @TableField(exist = false)
    private String orderTypeDesc;

    public String getOrderTypeDesc() {
        return orderType == null ? null : orderType.getDesc();
    }

    /**
     * 工单性质
     */
    private ProductionWorkOrder.WorkOrderQuality workOrderQuality;

    /**
     * 工单性质描述
     */
    @TableField(exist = false)
    private String workOrderQualityDesc;

    public String getWorkOrderQualityDesc() {
        return workOrderQuality == null ? null : workOrderQuality.getDesc();
    }

    /**
     * 生产计划编号
     */
    private String planCode;

    /**
     * 生产计划附件
     */
    private String accessory;


    private String fileUrl;

    private String fileName;

    /**
     * 产品名称
     */
    private String skuName;
    /**
     * 所属系列
     */
    private String productTypeName;

    /**
     * 机台平均合格率
     */
    private BigDecimal deviceYield;
    /**
     * 设备工单总数
     */
    private BigDecimal amount;
    /**
     * 设备工单合格数
     */
    private BigDecimal qualifiedQuantity;
    /**
     * 产品单位
     */
    private String unitName;
    /**
     * 产品规格
     */
    private String skuSpec;
    /**
     * 工序合格率
     */
    private String yield;
    /**
     * 计件工资
     */
    private BigDecimal pieceRate;
    /**
     * 产品类型id
     */
    private Long productTypeId;

    /**
     * 基准书id
     */
    private Long bookId;

    /**
     * 开工单状态标记，1: 查询待激活与生产中的开工单
     */
    private Integer statusFlag;
    private Long materialNature;
    private String materialNatureName;

    /**
     * 设备类型组
     */
    private String deviceTypes;

    /**
     * 工序属性列表
     */
    private String processTypes;

    /**
     * 设备类型名称组
     */
    private String deviceTypeNames;

    @TableField(exist = false)
    private List<DeviceTypeForm> deviceTypeList;

    /**
     * 不合格数
     */
    private Integer acceptanceNoQuantity;
    private Integer acceptanceQuantity;

    /**
     * 报工数
     */
    private Integer reportedQuantity;

    /**
     * 报修数
     */
    private Integer repairsQuantity;

    /**
     * 报废数
     */
    private Integer scrapQuantity;

    /**
     * 领料数
     */
    private Integer getQuantity;

    /**
     * 可领用数量
     */
    private Integer canGetQuantity;

    /**
     * 样品合格率
     */
    private BigDecimal ypOkRate;

    /**
     * 报工合格率
     */
    private BigDecimal bgOkRate;

    /**
     * 报工总数
     */
    private Integer workQuantityTotal;

    /**
     * 送检总数
     */
    private Integer sendQuantityTotal;

    /**
     * 关键词
     */
    private String keyword;

    String startCreateTime;
    
    String endCreateTime;
    
    String workshopName;

    String startPredictFinishTime;

    String endPredictFinishTime;

    String startPredictStartTime;

    String endPredictStartTime;

    String startShipmentTime;

    String endShipmentTime;

}
